package algoritmo;

import interfaz.Interfaz;


public class Main {
	public static void main(String[] args){
		


//		Cromosoma c = new Cromosoma();
//		c.genes.creaArbolCreciente(0, 4);
//		
//		c.genes.recalularNiveles(0);
//		c.genes.crearArbolDePrueba();
//		c.adaptacion();
//		c.genes.pintar();


//		c.adaptacion();

		
////		
		Interfaz in = new Interfaz();
		in.inicializarInterfaz();
//		in.pintarTablero(c);
//		
//		int profunfidad=4;
//		String tipoInicializacion ="rampedHalf";
		//PRUEBAS-----------
//		
//		AGenetico age = new AGenetico(Integer.valueOf(0),Integer.valueOf(0),Float.valueOf(0),Float.valueOf(0),tipoInicializacion,profunfidad);
//		
		
//		
//		Cromosoma c1 = new Cromosoma();
//		c1.genes=new Nodo();
//		c1.genes.dato="distX";
//		c1.genes.numNodos=1;
//		
//		Cromosoma hijo1,hijo2;
//		hijo1 = new Cromosoma();
//		hijo2 = new Cromosoma();
//		
//		age.pruebaMutacion();
//		age.cruce(c, c1, hijo1, hijo2);
		//c.genes.pintar();
//		c.adaptacion();
//		
//		c.genes.creaArbol(2, 3);
//		
//		
//		
//		System.out.println();
//		
		
//		c1.genes.creaArbol(2, 3);
//		c1.genes.pintar();
		
//		ag.cruce(c,c1,hijo1,hijo2);
//		Nodo n = c.genes.buscaNodo(3);
//		int a;
//		a = 10;
		//PRUEBAS-----------*/
		
		
		
		
//		Cromosoma hijo1 = new Cromosoma(9);
//		Cromosoma hijo2 = new Cromosoma(9);
		//FIXME PRUEBAS.BORRAR------------------------
//		ArrayList<Integer> a = new ArrayList<Integer>();
//		a.add(1);a.add(2);a.add(3);a.add(4);a.add(5);a.add(6);a.add(7);a.add(8);a.add(9);
////		a.add(3);a.add(7);a.add(12);a.add(11);a.add(5);a.add(2);a.add(10);a.add(9);a.add(6);a.add(4);a.add(8);a.add(1);
//		ArrayList<Integer> b = new ArrayList<Integer>();
//		b.add(4);b.add(5);b.add(2);b.add(1);b.add(8);b.add(7);b.add(6);b.add(9);b.add(3);
////		b.add(4);b.add(1);b.add(2);b.add(8);b.add(7);b.add(6);b.add(9);b.add(3);b.add(5);
////		b.add(8);b.add(11);b.add(6);b.add(2);b.add(4);b.add(5);b.add(3);b.add(10);b.add(1);b.add(12);b.add(9);b.add(7);
//		Cromosoma padre1 = new Cromosoma(a);
//		Cromosoma padre2 = new Cromosoma(b);
//		int longCrom = a.size();
//		int prueba = 9;
//		//ArrayList<Integer> con = calculaConectados(padre1, padre2, longCrom, prueba);
//		int borrar =0;
//		Cromosoma hijo1 = new Cromosoma(9);	
//		hijo1.inicializaGenes();	
//		Cromosoma hijo2 = new Cromosoma(9);
//		hijo2.inicializaGenes();	
//		//PRUEBAS.BORRAR------------------------
//		
//		ArrayList<Boolean> usados = new ArrayList<Boolean>();
//		for(int ind=0;ind<9;ind++){
//			usados.add(false);
//		}
//		
		

//		
//		hijo1.genes.set(0, padre2.genes.get(0));
//		hijo2.genes.set(0, padre1.genes.get(0));
//		usados.set(padre2.genes.get(0)-1,true);
////		ag.salirDelBackTrack=false;
//		ArrayList<Integer> resultado=new ArrayList<Integer>();
//		for(int i=0;i<longCrom;i++)
//			resultado.add(0);
//		ag.salirBackTrack=false;
//		ag.cruceRecombRutasBackTrack(resultado, padre1,padre2, usados, hijo1, padre2.genes.get(0), 9,1);


		//cargarDatos(rutaTai30);



//		AGenetico ag = new AGenetico(
//				Integer.valueOf(0),
//				Integer.valueOf(0),
//				Float.valueOf(0),
//				Float.valueOf(0),
//				Float.valueOf(0) );
//		//8,1,6,2,11,10,3,5,9,7,12,4
//		ArrayList<Integer> a = new ArrayList<Integer>();
//		a.add(8);a.add(1);a.add(6);a.add(2);a.add(11);a.add(10);a.add(3);a.add(5);a.add(9);a.add(7);a.add(12);a.add(4);
//		Cromosoma c = new Cromosoma(a);
//		int resul = c.evalua();
//		System.out.println();

		

//		ag.soluciones = new ArrayList<ArrayList<Integer>>();
//		ArrayList<Boolean> usados = new ArrayList<Boolean>();
//		ArrayList<Integer> elegidas = new ArrayList<Integer>();
//		ArrayList<Integer> sol = new ArrayList<Integer>();
//		for(int j=0;j<3;j++){
//			elegidas.add(0);
//			sol.add(0);
//			usados.add(false);
//		}
//		elegidas.set(0, 1);elegidas.set(1, 2);elegidas.set(2, 3);
//		ag.heuristicaBackTrack(usados,0,elegidas,sol);
//		hijo1.genes.set(0, padre2.genes.get(0));
//		hijo2.genes.set(0, padre1.genes.get(0));
//		usados.set(padre2.genes.get(0)-1,true);
////		ag.salirDelBackTrack=false;
//		ArrayList<Integer> resultado=new ArrayList<Integer>();
//		for(int i=0;i<longCrom;i++)
//			resultado.add(0);
//		ag.salirBackTrack=false;
//		ag.cruceRecombRutasBackTrack(resultado, padre1,padre2, usados, hijo1, padre2.genes.get(0), 9,1);
		
		

		
		
		
//		AGenetico ag = new AGenetico(100,100,(float)0.6,(float)0.1,tipoInicializacion,profunfidad);
//		ag.inicializa();
//		ag.evaluacionRetocada();
//		int tamElite = 4;
//		ag.evaluarPoblacion();
//		while( !ag.terminado() ){
//			//System.out.println("GENERACION"+ag.num_max_generac);
//			
////			if(i.getElitismo().isSelected())
////				ag.separarMejores(tamElite);
//			
//			ag.decrementaNum_max_generac();
//			
////			if(i.getMetodoCruce().getSelectedIndex() == 0)
////				ag.seleccionRuleta();//bien
////			else
////				ag.seleccionTorneo();
//			
//			ag.seleccionTorneo();
//			
//			ag.reproduccion();
//			
//			
//			ag.mutacion("funcionalTerminal");//SI UNA APTITUD NO ERA NEGATIVA, AL MUTAR, VUELVES A EVALUAR Y PUEDE QUE DE NEGATIVA
//			
////			if(i.getElitismo().isSelected()){
////				ag.incluirElitistas(tamElite);
////				ag.eliminarElite();
////			}
//			
//			ag.evaluacionRetocada();
//			//ag.comprobarAptitudes("a");
//			ag.evaluarPoblacion();
//			//ag.comprobarAptitudes("b");
//		}
//		ag.muestraElMejor();
//		for(int i=0;i<ag.losMejoresCadaGeneracion.size();i++){
//			
//			System.out.print(ag.losMejoresCadaGeneracion.get(i).getAptitud() + " " + i + "// ");
//			System.out.println();
//		}
	}

}
